<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;

class BaseModel extends Model
{
    /**
     * 使用整数时间戳
     */
    protected $dateFormat = 'U';

    /**
     * 时间戳字段为整数类型
     */
    protected $casts = [
        'created_at' => 'integer',
        'updated_at' => 'integer',
    ];

    /**
     * 默认排序：按创建时间降序
     */
    protected static function boot()
    {
        parent::boot();
        
        // 默认按创建时间降序排列
        // static::addGlobalScope('ordered', function ($builder) {
        //     $builder->orderBy('created_at', 'desc');
        // });
        
        // 创建时自动填充用户ID（如果模型有*_by_uid字段）
        static::creating(function ($model) {
            if ($model->isFillable('created_by_uid') && Auth::check()) {
                $model->created_by = Auth::id();
            }
            if ($model->isFillable('updated_by_uid') && Auth::check()) {
                $model->updated_by = Auth::id();
            }
        });
        
        // 更新时自动填充用户ID
        static::updating(function ($model) {
            if ($model->isFillable('updated_by_uid') && Auth::check()) {
                $model->updated_by = Auth::id();
            }
        });
    }
    
    /**
     * 格式化时间为东八区显示
     *
     * @param mixed $value
     * @param string $format
     * @return string
     */
    protected function formatDateToTimezone($value, $format = 'Y-m-d H:i')
    {
        if (!$value) {
            return null;
        }
        
        return $this->asDateTime($value)
            ->setTimezone('Asia/Shanghai')
            ->format($format);
    }
    
    /**
     * 获取创建时间（东八区）
     */
    public function getCreatedAtAttribute($value)
    {
        return $this->formatDateToTimezone($value);
    }

    /**
     * 获取更新时间（东八区）
     */
    public function getUpdatedAtAttribute($value)
    {
        return $this->formatDateToTimezone($value);
    }
}